package com.ssy.lingxi.after.sale.model.constant;

import com.ssy.lingxi.common.language.LanguageHolder;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 售后换货申请外部状态枚举
 * @author 伍将
 * @date 2020/9/11
 * @version 2.0.0
 */
public enum ReplaceGoodsOuterStatusEnum {

    /**
     * 所有
     */
    ALL(0, "所有"),
    /**
     * 待提交申请单 - 1
     */
    TO_BE_SUBMIT(1, "待提交申请单"),
    /**
     * 待确认申请单（已提交申请单） - 2
     */
    TO_BE_CONFIRM(2, "待确认申请单"),
    /**
     * 不接受申请（确认申请单） - 3
     */
    UN_ACCEPT_APPLY(3, "不接受申请"),
    /**
     * 接受申请（确认申请单） - 4
     */
    ACCEPT_APPLY(4, "接受申请"),
    /**
     * 待新增退货发货单（确认申请单后） - 5
     */
    TO_BE_ADD_RETURN_DELIVERY_GOODS(5, "待新增退货发货单"),
    /**
     * 采购商待新增物流单（新增换货发货单审核通过） - 6
     */
    CONSUMER_TO_BE_ADD_LOGISTICS(6, "待新增退货物流单"),
    /**
     * 待退货发货（新增物流单审核通过） - 7
     */
    TO_BE_RETURN_DELIVERY_GOODS(7, "待退货发货"),
    /**
     * 待新增退货入库单（已退货发货） - 8
     */
    TO_BE_ADD_RETURN_GOODS_STORAGE(8, "待新增退货入库单"),
    /**
     * 待退货收货（已新增换货入库单） - 9
     */
    TO_BE_RETURN_RECEIVE_GOODS(9, "待退货收货"),
    /**
     * 待确认退货回单（已换货收货） - 10
     */
    TO_BE_CONFIRM_RETURN_GOODS_RECEIPT(10, "待确认退货回单"),
    /**
     * 待新增换货发货单（已确认换货回单） - 11
     */
    TO_BE_ADD_REPLACE_DELIVERY_GOODS(11, "待新增换货发货单"),
    /**
     * 供应商待新增物流单（已新增换货发货单） - 12
     */
    SUPPLIER_TO_BE_ADD_LOGISTICS(12, "待新增换货物流单"),
    /**
     * 待换货发货（已新增物流单） - 13
     */
    TO_BE_REPLACE_DELIVERY_GOODS(13, "待换货发货"),
    /**
     * 待新增换货入库单（已换货发货） -14
     */
    TO_BE_ADD_REPLACE_GOODS_STORAGE(14, "待新增换货入库单"),
    /**
     * 待换货收货（已新增换货入库单） - 15
     */
    TO_BE_REPLACE_RECEIVE_GOODS(15, "待换货收货"),
    /**
     * 待确认换货回单（已换货收货） - 16
     */
    TO_BE_CONFIRM_REPLACE_GOODS_RECEIPT(16, "待确认换货回单"),
    /**
     * 待确认售后完成（确认换货回单） - 17
     */
    TO_BE_CONFIRM_COMPLETE(17, "待确认售后完成"),
    /**
     * 售后完成 - 18
     */
    COMPLETE(18, "售后完成"),
    /**
     * 已中止 - 19
     */
    STOPPED(19, "已中止");

    private final Integer code;
    private final String message;


    ReplaceGoodsOuterStatusEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return LanguageHolder.getName(this.getDeclaringClass(), this.getCode());
    }

    public static String getMessage(Integer code) {
        return Arrays.stream(ReplaceGoodsOuterStatusEnum.values()).filter(e -> e.getCode().equals(code)).findFirst().orElse(ALL).getMessage();
    }

    public static ReplaceGoodsOuterStatusEnum getEnum(Integer code) {
        return Arrays.stream(ReplaceGoodsOuterStatusEnum.values()).filter(e -> e.getCode().equals(code)).findFirst().orElse(ALL);
    }

    public static boolean isEnabledStop(Integer code) {
        List<Integer> codeList = Stream.of(UN_ACCEPT_APPLY, COMPLETE, STOPPED).map(ReplaceGoodsOuterStatusEnum::getCode).collect(Collectors.toList());
        return !codeList.contains(code);
    }
}
